home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / include / linux / nfsd / nfsd.h < prev    next >
Encoding:
C/C++ Source or Header  |  2009-09-09  |  13.9 KB  |  339 lines

  1. /*
  2.  * linux/include/linux/nfsd/nfsd.h
  3.  *
  4.  * Hodge-podge collection of knfsd-related stuff.
  5.  * I will sort this out later.
  6.  *
  7.  * Copyright (C) 1995-1997 Olaf Kirch <okir@monad.swb.de>
  8.  */
  9.  
  10. #ifndef LINUX_NFSD_NFSD_H
  11. #define LINUX_NFSD_NFSD_H
  12.  
  13. #include <linux/types.h>
  14. #include <linux/unistd.h>
  15. #include <linux/fs.h>
  16. #include <linux/posix_acl.h>
  17. #include <linux/mount.h>
  18.  
  19. #include <linux/nfsd/debug.h>
  20. #include <linux/nfsd/nfsfh.h>
  21. #include <linux/nfsd/export.h>
  22. #include <linux/nfsd/stats.h>
  23. /*
  24.  * nfsd version
  25.  */
  26. #define NFSD_VERSION        "0.5"
  27. #define NFSD_SUPPORTED_MINOR_VERSION    0
  28.  
  29. /*
  30.  * Flags for nfsd_permission
  31.  */
  32. #define NFSD_MAY_NOP        0
  33. #define NFSD_MAY_EXEC        1 /* == MAY_EXEC */
  34. #define NFSD_MAY_WRITE        2 /* == MAY_WRITE */
  35. #define NFSD_MAY_READ        4 /* == MAY_READ */
  36. #define NFSD_MAY_SATTR        8
  37. #define NFSD_MAY_TRUNC        16
  38. #define NFSD_MAY_LOCK        32
  39. #define NFSD_MAY_OWNER_OVERRIDE    64
  40. #define NFSD_MAY_LOCAL_ACCESS    128 /* IRIX doing local access check on device special file*/
  41. #define NFSD_MAY_BYPASS_GSS_ON_ROOT 256
  42.  
  43. #define NFSD_MAY_CREATE        (NFSD_MAY_EXEC|NFSD_MAY_WRITE)
  44. #define NFSD_MAY_REMOVE        (NFSD_MAY_EXEC|NFSD_MAY_WRITE|NFSD_MAY_TRUNC)
  45.  
  46. /*
  47.  * Callback function for readdir
  48.  */
  49. struct readdir_cd {
  50.     __be32            err;    /* 0, nfserr, or nfserr_eof */
  51. };
  52. typedef int (*nfsd_dirop_t)(struct inode *, struct dentry *, int, int);
  53.  
  54. extern struct svc_program    nfsd_program;
  55. extern struct svc_version    nfsd_version2, nfsd_version3,
  56.                 nfsd_version4;
  57. extern struct mutex        nfsd_mutex;
  58. extern struct svc_serv        *nfsd_serv;
  59.  
  60. extern struct seq_operations nfs_exports_op;
  61.  
  62. /*
  63.  * Function prototypes.
  64.  */
  65. int        nfsd_svc(unsigned short port, int nrservs);
  66. int        nfsd_dispatch(struct svc_rqst *rqstp, __be32 *statp);
  67.  
  68. int        nfsd_nrthreads(void);
  69. int        nfsd_nrpools(void);
  70. int        nfsd_get_nrthreads(int n, int *);
  71. int        nfsd_set_nrthreads(int n, int *);
  72.  
  73. /* nfsd/vfs.c */
  74. int        fh_lock_parent(struct svc_fh *, struct dentry *);
  75. int        nfsd_racache_init(int);
  76. void        nfsd_racache_shutdown(void);
  77. int        nfsd_cross_mnt(struct svc_rqst *rqstp, struct dentry **dpp,
  78.                         struct svc_export **expp);
  79. __be32        nfsd_lookup(struct svc_rqst *, struct svc_fh *,
  80.                 const char *, unsigned int, struct svc_fh *);
  81. __be32         nfsd_lookup_dentry(struct svc_rqst *, struct svc_fh *,
  82.                 const char *, unsigned int,
  83.                 struct svc_export **, struct dentry **);
  84. __be32        nfsd_setattr(struct svc_rqst *, struct svc_fh *,
  85.                 struct iattr *, int, time_t);
  86. #ifdef CONFIG_NFSD_V4
  87. __be32          nfsd4_set_nfs4_acl(struct svc_rqst *, struct svc_fh *,
  88.                     struct nfs4_acl *);
  89. int             nfsd4_get_nfs4_acl(struct svc_rqst *, struct dentry *,
  90.                 struct vfsmount *mnt, struct nfs4_acl **);
  91. #endif /* CONFIG_NFSD_V4 */
  92. __be32        nfsd_create(struct svc_rqst *, struct svc_fh *,
  93.                 char *name, int len, struct iattr *attrs,
  94.                 int type, dev_t rdev, struct svc_fh *res);
  95. #ifdef CONFIG_NFSD_V3
  96. __be32        nfsd_access(struct svc_rqst *, struct svc_fh *, u32 *, u32 *);
  97. __be32        nfsd_create_v3(struct svc_rqst *, struct svc_fh *,
  98.                 char *name, int len, struct iattr *attrs,
  99.                 struct svc_fh *res, int createmode,
  100.                 u32 *verifier, int *truncp, int *created);
  101. __be32        nfsd_commit(struct svc_rqst *, struct svc_fh *,
  102.                 loff_t, unsigned long);
  103. #endif /* CONFIG_NFSD_V3 */
  104. __be32        nfsd_open(struct svc_rqst *, struct svc_fh *, int,
  105.                 int, struct file **);
  106. void        nfsd_close(struct file *);
  107. __be32         nfsd_read(struct svc_rqst *, struct svc_fh *, struct file *,
  108.                 loff_t, struct kvec *, int, unsigned long *);
  109. __be32         nfsd_write(struct svc_rqst *, struct svc_fh *,struct file *,
  110.                 loff_t, struct kvec *,int, unsigned long, int *);
  111. __be32        nfsd_readlink(struct svc_rqst *, struct svc_fh *,
  112.                 char *, int *);
  113. __be32        nfsd_symlink(struct svc_rqst *, struct svc_fh *,
  114.                 char *name, int len, char *path, int plen,
  115.                 struct svc_fh *res, struct iattr *);
  116. __be32        nfsd_link(struct svc_rqst *, struct svc_fh *,
  117.                 char *, int, struct svc_fh *);
  118. __be32        nfsd_rename(struct svc_rqst *,
  119.                 struct svc_fh *, char *, int,
  120.                 struct svc_fh *, char *, int);
  121. __be32        nfsd_remove(struct svc_rqst *,
  122.                 struct svc_fh *, char *, int);
  123. __be32        nfsd_unlink(struct svc_rqst *, struct svc_fh *, int type,
  124.                 char *name, int len);
  125. int        nfsd_truncate(struct svc_rqst *, struct svc_fh *,
  126.                 unsigned long size);
  127. __be32        nfsd_readdir(struct svc_rqst *, struct svc_fh *,
  128.                  loff_t *, struct readdir_cd *, filldir_t);
  129. __be32        nfsd_statfs(struct svc_rqst *, struct svc_fh *,
  130.                 struct kstatfs *, int access);
  131.  
  132. int        nfsd_notify_change(struct inode *, struct iattr *);
  133. __be32        nfsd_permission(struct svc_rqst *, struct svc_export *,
  134.                 struct dentry *, int);
  135. int        nfsd_sync_dir(struct dentry *dp);
  136.  
  137. #if defined(CONFIG_NFSD_V2_ACL) || defined(CONFIG_NFSD_V3_ACL)
  138. #ifdef CONFIG_NFSD_V2_ACL
  139. extern struct svc_version nfsd_acl_version2;
  140. #else
  141. #define nfsd_acl_version2 NULL
  142. #endif
  143. #ifdef CONFIG_NFSD_V3_ACL
  144. extern struct svc_version nfsd_acl_version3;
  145. #else
  146. #define nfsd_acl_version3 NULL
  147. #endif
  148. struct posix_acl *nfsd_get_posix_acl(struct svc_fh *, int);
  149. int nfsd_set_posix_acl(struct svc_fh *, int, struct posix_acl *);
  150. #endif
  151.  
  152. enum vers_op {NFSD_SET, NFSD_CLEAR, NFSD_TEST, NFSD_AVAIL };
  153. int nfsd_vers(int vers, enum vers_op change);
  154. void nfsd_reset_versions(void);
  155. int nfsd_create_serv(void);
  156.  
  157. extern int nfsd_max_blksize;
  158.  
  159. /* 
  160.  * NFSv4 State
  161.  */
  162. #ifdef CONFIG_NFSD_V4
  163. extern unsigned int max_delegations;
  164. int nfs4_state_init(void);
  165. void nfsd4_free_slabs(void);
  166. void nfs4_state_start(void);
  167. void nfs4_state_shutdown(void);
  168. time_t nfs4_lease_time(void);
  169. void nfs4_reset_lease(time_t leasetime);
  170. int nfs4_reset_recoverydir(char *recdir);
  171. #else
  172. static inline int nfs4_state_init(void) { return 0; }
  173. static inline void nfsd4_free_slabs(void) { }
  174. static inline void nfs4_state_start(void) { }
  175. static inline void nfs4_state_shutdown(void) { }
  176. static inline time_t nfs4_lease_time(void) { return 0; }
  177. static inline void nfs4_reset_lease(time_t leasetime) { }
  178. static inline int nfs4_reset_recoverydir(char *recdir) { return 0; }
  179. #endif
  180.  
  181. /*
  182.  * lockd binding
  183.  */
  184. void        nfsd_lockd_init(void);
  185. void        nfsd_lockd_shutdown(void);
  186.  
  187.  
  188. /*
  189.  * These macros provide pre-xdr'ed values for faster operation.
  190.  */
  191. #define    nfs_ok            __constant_htonl(NFS_OK)
  192. #define    nfserr_perm        __constant_htonl(NFSERR_PERM)
  193. #define    nfserr_noent        __constant_htonl(NFSERR_NOENT)
  194. #define    nfserr_io        __constant_htonl(NFSERR_IO)
  195. #define    nfserr_nxio        __constant_htonl(NFSERR_NXIO)
  196. #define    nfserr_eagain        __constant_htonl(NFSERR_EAGAIN)
  197. #define    nfserr_acces        __constant_htonl(NFSERR_ACCES)
  198. #define    nfserr_exist        __constant_htonl(NFSERR_EXIST)
  199. #define    nfserr_xdev        __constant_htonl(NFSERR_XDEV)
  200. #define    nfserr_nodev        __constant_htonl(NFSERR_NODEV)
  201. #define    nfserr_notdir        __constant_htonl(NFSERR_NOTDIR)
  202. #define    nfserr_isdir        __constant_htonl(NFSERR_ISDIR)
  203. #define    nfserr_inval        __constant_htonl(NFSERR_INVAL)
  204. #define    nfserr_fbig        __constant_htonl(NFSERR_FBIG)
  205. #define    nfserr_nospc        __constant_htonl(NFSERR_NOSPC)
  206. #define    nfserr_rofs        __constant_htonl(NFSERR_ROFS)
  207. #define    nfserr_mlink        __constant_htonl(NFSERR_MLINK)
  208. #define    nfserr_opnotsupp    __constant_htonl(NFSERR_OPNOTSUPP)
  209. #define    nfserr_nametoolong    __constant_htonl(NFSERR_NAMETOOLONG)
  210. #define    nfserr_notempty        __constant_htonl(NFSERR_NOTEMPTY)
  211. #define    nfserr_dquot        __constant_htonl(NFSERR_DQUOT)
  212. #define    nfserr_stale        __constant_htonl(NFSERR_STALE)
  213. #define    nfserr_remote        __constant_htonl(NFSERR_REMOTE)
  214. #define    nfserr_wflush        __constant_htonl(NFSERR_WFLUSH)
  215. #define    nfserr_badhandle    __constant_htonl(NFSERR_BADHANDLE)
  216. #define    nfserr_notsync        __constant_htonl(NFSERR_NOT_SYNC)
  217. #define    nfserr_badcookie    __constant_htonl(NFSERR_BAD_COOKIE)
  218. #define    nfserr_notsupp        __constant_htonl(NFSERR_NOTSUPP)
  219. #define    nfserr_toosmall        __constant_htonl(NFSERR_TOOSMALL)
  220. #define    nfserr_serverfault    __constant_htonl(NFSERR_SERVERFAULT)
  221. #define    nfserr_badtype        __constant_htonl(NFSERR_BADTYPE)
  222. #define    nfserr_jukebox        __constant_htonl(NFSERR_JUKEBOX)
  223. #define    nfserr_denied        __constant_htonl(NFSERR_DENIED)
  224. #define    nfserr_deadlock        __constant_htonl(NFSERR_DEADLOCK)
  225. #define nfserr_expired          __constant_htonl(NFSERR_EXPIRED)
  226. #define    nfserr_bad_cookie    __constant_htonl(NFSERR_BAD_COOKIE)
  227. #define    nfserr_same        __constant_htonl(NFSERR_SAME)
  228. #define    nfserr_clid_inuse    __constant_htonl(NFSERR_CLID_INUSE)
  229. #define    nfserr_stale_clientid    __constant_htonl(NFSERR_STALE_CLIENTID)
  230. #define    nfserr_resource        __constant_htonl(NFSERR_RESOURCE)
  231. #define    nfserr_moved        __constant_htonl(NFSERR_MOVED)
  232. #define    nfserr_nofilehandle    __constant_htonl(NFSERR_NOFILEHANDLE)
  233. #define    nfserr_minor_vers_mismatch    __constant_htonl(NFSERR_MINOR_VERS_MISMATCH)
  234. #define nfserr_share_denied    __constant_htonl(NFSERR_SHARE_DENIED)
  235. #define nfserr_stale_stateid    __constant_htonl(NFSERR_STALE_STATEID)
  236. #define nfserr_old_stateid    __constant_htonl(NFSERR_OLD_STATEID)
  237. #define nfserr_bad_stateid    __constant_htonl(NFSERR_BAD_STATEID)
  238. #define nfserr_bad_seqid    __constant_htonl(NFSERR_BAD_SEQID)
  239. #define    nfserr_symlink        __constant_htonl(NFSERR_SYMLINK)
  240. #define    nfserr_not_same        __constant_htonl(NFSERR_NOT_SAME)
  241. #define    nfserr_restorefh    __constant_htonl(NFSERR_RESTOREFH)
  242. #define    nfserr_attrnotsupp    __constant_htonl(NFSERR_ATTRNOTSUPP)
  243. #define    nfserr_bad_xdr        __constant_htonl(NFSERR_BAD_XDR)
  244. #define    nfserr_openmode        __constant_htonl(NFSERR_OPENMODE)
  245. #define    nfserr_locks_held    __constant_htonl(NFSERR_LOCKS_HELD)
  246. #define    nfserr_op_illegal    __constant_htonl(NFSERR_OP_ILLEGAL)
  247. #define    nfserr_grace        __constant_htonl(NFSERR_GRACE)
  248. #define    nfserr_no_grace        __constant_htonl(NFSERR_NO_GRACE)
  249. #define    nfserr_reclaim_bad    __constant_htonl(NFSERR_RECLAIM_BAD)
  250. #define    nfserr_badname        __constant_htonl(NFSERR_BADNAME)
  251. #define    nfserr_cb_path_down    __constant_htonl(NFSERR_CB_PATH_DOWN)
  252. #define    nfserr_locked        __constant_htonl(NFSERR_LOCKED)
  253. #define    nfserr_wrongsec        __constant_htonl(NFSERR_WRONGSEC)
  254. #define    nfserr_replay_me    __constant_htonl(NFSERR_REPLAY_ME)
  255.  
  256. /* error codes for internal use */
  257. /* if a request fails due to kmalloc failure, it gets dropped.
  258.  *  Client should resend eventually
  259.  */
  260. #define    nfserr_dropit        __constant_htonl(30000)
  261. /* end-of-file indicator in readdir */
  262. #define    nfserr_eof        __constant_htonl(30001)
  263.  
  264. /* Check for dir entries '.' and '..' */
  265. #define isdotent(n, l)    (l < 3 && n[0] == '.' && (l == 1 || n[1] == '.'))
  266.  
  267. /*
  268.  * Time of server startup
  269.  */
  270. extern struct timeval    nfssvc_boot;
  271.  
  272. #ifdef CONFIG_NFSD_V4
  273.  
  274. /* before processing a COMPOUND operation, we have to check that there
  275.  * is enough space in the buffer for XDR encode to succeed.  otherwise,
  276.  * we might process an operation with side effects, and be unable to
  277.  * tell the client that the operation succeeded.
  278.  *
  279.  * COMPOUND_SLACK_SPACE - this is the minimum bytes of buffer space
  280.  * needed to encode an "ordinary" _successful_ operation.  (GETATTR,
  281.  * READ, READDIR, and READLINK have their own buffer checks.)  if we
  282.  * fall below this level, we fail the next operation with NFS4ERR_RESOURCE.
  283.  *
  284.  * COMPOUND_ERR_SLACK_SPACE - this is the minimum bytes of buffer space
  285.  * needed to encode an operation which has failed with NFS4ERR_RESOURCE.
  286.  * care is taken to ensure that we never fall below this level for any
  287.  * reason.
  288.  */
  289. #define    COMPOUND_SLACK_SPACE        140    /* OP_GETFH */
  290. #define COMPOUND_ERR_SLACK_SPACE    12     /* OP_SETATTR */
  291.  
  292. #define NFSD_LEASE_TIME                 (nfs4_lease_time())
  293. #define NFSD_LAUNDROMAT_MINTIMEOUT      10   /* seconds */
  294.  
  295. /*
  296.  * The following attributes are currently not supported by the NFSv4 server:
  297.  *    ARCHIVE       (deprecated anyway)
  298.  *    HIDDEN        (unlikely to be supported any time soon)
  299.  *    MIMETYPE      (unlikely to be supported any time soon)
  300.  *    QUOTA_*       (will be supported in a forthcoming patch)
  301.  *    SYSTEM        (unlikely to be supported any time soon)
  302.  *    TIME_BACKUP   (unlikely to be supported any time soon)
  303.  *    TIME_CREATE   (unlikely to be supported any time soon)
  304.  */
  305. #define NFSD_SUPPORTED_ATTRS_WORD0                                                          \
  306. (FATTR4_WORD0_SUPPORTED_ATTRS   | FATTR4_WORD0_TYPE         | FATTR4_WORD0_FH_EXPIRE_TYPE   \
  307.  | FATTR4_WORD0_CHANGE          | FATTR4_WORD0_SIZE         | FATTR4_WORD0_LINK_SUPPORT     \
  308.  | FATTR4_WORD0_SYMLINK_SUPPORT | FATTR4_WORD0_NAMED_ATTR   | FATTR4_WORD0_FSID             \
  309.  | FATTR4_WORD0_UNIQUE_HANDLES  | FATTR4_WORD0_LEASE_TIME   | FATTR4_WORD0_RDATTR_ERROR     \
  310.  | FATTR4_WORD0_ACLSUPPORT      | FATTR4_WORD0_CANSETTIME   | FATTR4_WORD0_CASE_INSENSITIVE \
  311.  | FATTR4_WORD0_CASE_PRESERVING | FATTR4_WORD0_CHOWN_RESTRICTED                             \
  312.  | FATTR4_WORD0_FILEHANDLE      | FATTR4_WORD0_FILEID       | FATTR4_WORD0_FILES_AVAIL      \
  313.  | FATTR4_WORD0_FILES_FREE      | FATTR4_WORD0_FILES_TOTAL  | FATTR4_WORD0_FS_LOCATIONS | FATTR4_WORD0_HOMOGENEOUS      \
  314.  | FATTR4_WORD0_MAXFILESIZE     | FATTR4_WORD0_MAXLINK      | FATTR4_WORD0_MAXNAME          \
  315.  | FATTR4_WORD0_MAXREAD         | FATTR4_WORD0_MAXWRITE     | FATTR4_WORD0_ACL)
  316.  
  317. #define NFSD_SUPPORTED_ATTRS_WORD1                                                          \
  318. (FATTR4_WORD1_MODE              | FATTR4_WORD1_NO_TRUNC     | FATTR4_WORD1_NUMLINKS         \
  319.  | FATTR4_WORD1_OWNER            | FATTR4_WORD1_OWNER_GROUP  | FATTR4_WORD1_RAWDEV           \
  320.  | FATTR4_WORD1_SPACE_AVAIL     | FATTR4_WORD1_SPACE_FREE   | FATTR4_WORD1_SPACE_TOTAL      \
  321.  | FATTR4_WORD1_SPACE_USED      | FATTR4_WORD1_TIME_ACCESS  | FATTR4_WORD1_TIME_ACCESS_SET  \
  322.  | FATTR4_WORD1_TIME_DELTA   | FATTR4_WORD1_TIME_METADATA    \
  323.  | FATTR4_WORD1_TIME_MODIFY     | FATTR4_WORD1_TIME_MODIFY_SET | FATTR4_WORD1_MOUNTED_ON_FILEID)
  324.  
  325. /* These will return ERR_INVAL if specified in GETATTR or READDIR. */
  326. #define NFSD_WRITEONLY_ATTRS_WORD1                                \
  327. (FATTR4_WORD1_TIME_ACCESS_SET   | FATTR4_WORD1_TIME_MODIFY_SET)
  328.  
  329. /* These are the only attrs allowed in CREATE/OPEN/SETATTR. */
  330. #define NFSD_WRITEABLE_ATTRS_WORD0                                                          \
  331. (FATTR4_WORD0_SIZE              | FATTR4_WORD0_ACL                                         )
  332. #define NFSD_WRITEABLE_ATTRS_WORD1                                                          \
  333. (FATTR4_WORD1_MODE              | FATTR4_WORD1_OWNER         | FATTR4_WORD1_OWNER_GROUP     \
  334.  | FATTR4_WORD1_TIME_ACCESS_SET | FATTR4_WORD1_TIME_MODIFY_SET)
  335.  
  336. #endif /* CONFIG_NFSD_V4 */
  337.  
  338. #endif /* LINUX_NFSD_NFSD_H */
  339.